#include <stdio.h>

// 定义了一个枚举类型 类型是不占用内存的
// 颜色的枚举
enum Color{
	green,
	red,
	blue,
	black = 100,
	pink,
	yellow,
	white
};

int main(int argc, const char *argv[])
{
	// 使用枚举类型定义枚举变量--才占用内存
	enum Color c1;

	// 给枚举变量赋值
	c1 = green;
	printf("c1 = %d\n", c1); // 0
	// 枚举变量也可以被重新赋值
	c1 = blue;
	printf("c1 = %d\n", c1); // 2

	// 初始化的写法
	enum Color c2 = red;
	printf("c2 = %d\n", c2); // 1

	// 枚举变量之间也可以直接相互赋值
	c1 = c2;
	printf("c1 = %d\n", c1); // 1

	// 如果给某个成员赋了初始值 那么从该成员开始 后面的成员依次 递增1 
	enum Color c3 = black;
	printf("c3 = %d\n", c3); // 100
	c3 = yellow;
	printf("c3 = %d\n", c3); // 102

	// 虽然允许直接使用整数给枚举变量赋值 
	// 但是一般不这样做 因为这样做就失去枚举的意义了
	//enum Color c4 = 101;
	//printf("c4 = %d\n", c4); // 101

	// 枚举类型的大小和枚举成员的最大值有关，但是一般都是4字节 
	printf("sizeof(enum Color) = %ld\n", sizeof(enum Color)); //

	// 枚举类型一旦定义好了，成员就都是常量了，不能修改了
	//pink = 1000; // 错误的
	
	// 当局部变量名和枚举成员名冲突时 采用局部优先原则
	int pink = 1234;
	enum Color c5 = pink;
	printf("c5 = %d\n", c5); // 1234
	
	return 0;
}
